package com.laoli.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class JobBean {
    /**
     * 任务名称
     */
    private String jobName;
    /**
     * 任务类
     */
    private String jobClass;
    /**
     * 任务执行时间
     */
    private String cronExpression;
}

// JobBean有什么作用？为什么不直接在QuartzController中new MyJob，而要用JobBean这一层？
//
// 1. Quartz的任务调度机制：
//    Quartz由调度器统一管理任务，而不是手动new一个任务对象直接运行。直接new MyJob()只是普通Java对象，不会被Quartz调度，也不会自动按时间执行。
//    正确做法是：把任务的描述信息（任务名、任务类、执行时间等）交给Quartz，由它来负责创建和调度任务实例。
//
// 2. JobBean的作用：
//    JobBean是用来描述任务信息的载体，不是任务本身。而是告诉Quartz“我要什么任务、怎么执行、叫什么名字”。你在Controller里new一个JobBean，把任务的关键信息（如任务名、任务类、cron表达式）封装进去，然后传给JobUtils，由工具类负责和Quartz交互，完成任务的注册和调度。
//    这样做的好处有：
//    - 解耦：Controller只负责收集和传递任务信息，不关心具体怎么和Quartz打交道。
//    - 灵活性：可以通过不同的JobBean，动态创建不同类型、不同时间的任务。
//    - 扩展性：以后如果任务需要更多参数，只需扩展JobBean即可，Controller和工具类的接口都不用大改。
//
// 3. 直接new MyJob()的局限：
//    直接new MyJob()只能手动调用execute()方法，完全绕过了Quartz的调度体系，失去了定时、持久化、并发控制等所有Quartz的高级功能。
//    没法通过cron表达式等灵活地控制任务的执行时间，也没法让Quartz帮你管理任务的生命周期（如暂停、恢复、删除等）。
//
// 4. 总结：
//    JobBean是任务信息的描述，不是任务本身。不能直接new MyJob()来实现定时调度，必须通过Quartz的调度器来管理任务。
//    JobBean让任务的创建、管理更加灵活、解耦、易扩展。
//    如果想实现动态、可管理的定时任务，JobBean这一层是非常有必要的。
